VS静态编译设置

您所在的位置:网站首页 VS 静态编译Qt VS静态编译设置

VS静态编译设置

2024-06-28 18:20| 来源: 网络整理| 查看: 265

首先必须搞清楚项目->项目属性->配置属性->C/C++->代码生成->运行库中四个选项的关系:  多线程调试Dll (/MDd) 对应——-MD_DynamicDebug  多线程Dll (/MD) 对应————-MD_DynamicRelease  多线程(/MT) 对应—————–MD_StaticRelease  多线程(/MTd)对应—————-MD_StaticDebug  在msdn中有详细解释: http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx

一句话总结就是:D用于动态,T用于静态,带d的是debug模式的 。那么出现类似如下错误信息:

LNK2038 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”

一般就是用Release模式去链接了一个Debug编译出的lib,或者用Debug模式链接了Release编译的lib。因此先检查上面的运行库是否对应正确,release模式一定不能选MDd或MTd的。  若出现下面这种警告信息: 这里写图片描述 请检查项目->项目属性->配置属性->链接器->输入->附加依赖项里面是否包含了错误的lib, 文件名中由d结尾的都是debug模式才能链接,没有d的只有release模式才能链接。例如,如OpenCV几个Release编译的lib:

cv210.lib cvaux210.lib cxcore210.lib highgui210.lib ml210.lib  

只能在Release模式下链接,对应的Debug版本就是:

cv210d.lib cvaux210d.lib cxcore210d.lib highgui210d.lib ml210d.lib (PS:事实上经过测试,我的情况是,release和debug模式下都必须链接不带d的lib文件,否则就会出现上述报错,因此各位还是根据自己的实际情况选择,网上说的对你不一定适用,仅供参考) 

当上面的问题都解决后,又出现下面这个错误信息的话:

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”  

是因为我的项目中不仅用到了VC运行库,还用到了Qt5.6和OpenCV3.0运行库,应该是没有静态库才会无法进行静态编译。解决方案,可以自己编译,也可以下载别人编译好的。  具体参考下面两个链接:  Qt静态编译: http://blog.csdn.net/wyansai/article/details/51178631  OpenCV3.0静态编译: http://wenku.baidu.com/link?url=POLa27gr8KnZtj-Kw84XhVesfr_Hl_5eepIXGh7lma3wg9pn0gYCFBW9kwZ4EYDcG9n5Y7K7S3fbm_JT2n-Wmzk0ZiZM-76CV3X52EHGUEG

其他参考资料:

http://blog.csdn.net/u79501/article/details/51437359 http://blog.csdn.net/xiaowei_cqu/article/details/7586449 http://blog.163.com/tab_98/blog/static/1192409720156522432242/

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3